package twelfth.字节流与字符流基本操作.文件复制;

import java.io.*;

/**
 * 因为文件不一定都是文本文件，所以用字节输出流操作
 * 复制程序有以下两种：
 * ①将源文件中的内容全部读取到内存中，并一次性写入到目标文件之中
 * ②不将源文件中的内容全部读取进来，而是采用边读边写的方式
 * 显然第二种合理，因为如果一次性全部读取到内存中，文件内容过多，整个内存是无法装下的，则程序肯定会出现异常
 * 而采用边读边写的方式，肯定要比全部读进来性能高很多
 */
public class 范例_文件复制 {
    public static void main(String[] args) throws IOException {
     String path1="D:" + File.separator + "WorkSpaces" + File.separator +
             "JavaDevelopBase_start_329" + File.separator + "src" + File.separator +
             "twelfth" + File.separator + "WriterDemo.txt";
     String path2="D:" + File.separator + "WorkSpaces" + File.separator +
             "JavaDevelopBase_start_329" + File.separator + "src" + File.separator +
             "twelfth" + File.separator + "demo2.txt";
        File f1 = new File(path1);
        File f2 = new File(path2);
        if (!f1.exists()) {
            System.out.println("源文件不存在");
            System.exit(1);
        }
        InputStream is = null;
        OutputStream os = null;
        is= new FileInputStream(f1);
        os= new FileOutputStream(f2);
        if(is!=null&& os!=null){
            int temp = 0;
            try {
                while((temp=is.read())!=-1){    //开始复制
                    os.write(temp);     //边读边写
                }
                System.out.println("复制完成");
            } catch (IOException e) {
               e.printStackTrace();
                System.out.println("复制失败");
            }
            //关闭资源
            is.close();
            os.close();
        }
    }
}
/**
 * 本次程序有一个缺点就是：每次只能复制一个字节，如果文件量一大 复制就贼难用
 * 为此可以修改程序，一块一块复制
 */
/*
D:\WorkSpaces\Java\jdk-21\bin\java.exe "-javaagent:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=63143:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\WorkSpaces\JavaDevelopBase_start_329\out\production\JavaDevelopBase_start_329 twelfth.字节流与字符流基本操作.文件复制.范例_文件复制
复制完成

Process finished with exit code 0

 */